package uniandes.cupi2.tweetSpy.interfaz;

import java.awt.List;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jboss.system.server.ServerConfig;
import org.jboss.system.server.ServerConfigLocator;

import Iterador.IteradorSimple;
import ListaSimple.Lista;
import uniandes.cupi2.tweetSpy.mundo.TweetSpy;
import uniandes.cupi2.tweetSpy.twitter.LoginTwitter;

//TODO
/**
 * Servlet que se encarga de 
 */
public class ServletSearch extends HttpServlet {

	public final static String RUTA_ARCHIVO_SERIALIZADO = "/tweetSpy.data";

	// -----------------------------------------------------------------
	// Metodos
	// -----------------------------------------------------------------

	/**
	 * Inicializacion del Servlet
	 */
	public void init() throws ServletException {
	}

	public void destroy( ) {
		System.out.println("Destruyendo instancia");
		
		try {
			if (TweetSpy.getInstance() != null) {
				ServerConfig config = ServerConfigLocator.locate();
				File dataDir = config.getServerDataDir();
				File tmp = new File(dataDir + RUTA_ARCHIVO_SERIALIZADO);
				if( !tmp.exists( ) )
				{
					tmp.mkdirs();
				}
				System.out.println("Nombre=" + tmp.getName());
				System.out.println("Path=" + tmp.getPath());
				System.out.println("Abs. Path=" + tmp.getAbsolutePath());

				FileOutputStream fos = new FileOutputStream(tmp);
				ObjectOutputStream oos = new ObjectOutputStream(fos);
				oos.writeObject(TweetSpy.getInstance());
				oos.close();
				fos.close();
				System.out.println("Twitter Serializado");
			}
		} catch (Exception e) {
			System.out.println("Error de persistencia en Servidor");
		}
	}

	/**
	 * Maneja un pedido POST de un cliente 
	 * @param request Pedido del cliente
	 * @param response Respuesta
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		procesarSolicitud(request, response);
	}
	
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// Maneja el GET y el POST de la misma manera
		procesarSolicitud(request, response);
	}

	/**
	 * Procesa el pedido de igual manera para todos
	 * @param request Pedido del cliente
	 * @param response Respuesta
	 * @throws IOException Excepcion de error al escribir la respuesta
	 */
	private void procesarSolicitud( HttpServletRequest request, HttpServletResponse response ) throws IOException
	{
		
		PrintWriter respuesta = response.getWriter( );
		try {
			TweetSpy instancia = TweetSpy.getInstance( );
			Iterator< String > indices = instancia.darIndices( );
			String urlFoto = instancia.darUrlFotoUB( );
			String screemName = instancia.darScreemNameUB( );
			imprimeEncabezado( respuesta );
			imprimirContenido( respuesta, indices, urlFoto, screemName );
		} catch (Exception e) {
			imprimirError(respuesta, e.getMessage( ) );
		}
	}

	private void imprimirContenido ( PrintWriter respuesta, Iterator < String > indices, String urlFoto, String screemName )
	{
		respuesta.println("<div class=\"vertical\">");
		respuesta.println("		<figure>");
		respuesta.println("			<img src=\"" + urlFoto + "\" alt=\"Jimi Hendrix\" width=\"180\" height=\"180\" />");
		respuesta.println("			<figcaption class=\"grey\">"+screemName+"</figcaption>");
		respuesta.println("		</figure>");
		respuesta.println("	</div>");
		respuesta.println("    <!-- end .sidebar1 --></div>");
		respuesta.println("<div class=\"content\">");
		respuesta.println("	<div class=\"CSSTableGenerator\" >");
		respuesta.println("                <table >");
		respuesta.println("                    <tr>");
		respuesta.println("                        <td>");
		respuesta.println("                            Crear Indice");
		respuesta.println("                        </td>");
		respuesta.println("                    </tr>");
		respuesta.println("                    <tr>");
		respuesta.println("                        <td >");
		respuesta.println("                            <form action = \"indicePalabrasD.htm\" method = \"get\">");
		respuesta.println("								<div>");
		respuesta.println("									<center>");
		respuesta.println("									<input class = \"searchIndex\" type=\"text\" id=\"inputNombre\" name=\"nombreIndice\" placeholder = \"Ingresar Palabra, frase o #\" size = \"30px\">");
		respuesta.println("									<input class = \"searchIndex\" type= \"submit\" id = \"Crear\" name = \"submit\" value = \"Crear\">");
		respuesta.println("									</center>");
		respuesta.println("								</div>");
		respuesta.println("							</form>");
		respuesta.println("                        </td>");
		respuesta.println("                    </tr>");
		respuesta.println("                </table>");
		respuesta.println("				");
		respuesta.println("				<table >");
		respuesta.println("                    <tr>");
		respuesta.println("                        <td>");
		respuesta.println("                            Buscar Indice");
		respuesta.println("                        </td>");
		respuesta.println("                    </tr>");
		respuesta.println("                    <tr>");
		respuesta.println("                        <td >");
		respuesta.println("                            <form action = \"indicePalabrasD.htm\" method = \"get\">");
		respuesta.println("								<div>");
		respuesta.println("									<center>");
		respuesta.println("									<input class = \"searchIndex\" type=\"text\" id=\"qNombre\" name=\"qIndice\" placeholder = \"Ingresar Palabra, frase o #\" size = \"30px\">");
		respuesta.println("									<input class = \"searchIndex\" type= \"submit\" id = \"Buscar\" name = \"submit\" value = \"Buscar\">");
		respuesta.println("									<input class = \"searchIndex\" type= \"submit\" id = \"BuscarPrefijo\" name = \"submit\" value = \"Buscar Prefijo\">");
		respuesta.println("									</center>");
		respuesta.println("								</div>");
		respuesta.println("							</form>");
		respuesta.println("                        </td>");
		respuesta.println("                    </tr>");
		respuesta.println("                </table>");
		respuesta.println("				<div id=\"list2\">");
		respuesta.println("					<ol>");
		try
		{
		while ( indices.hasNext( ) )
		{
			String nombre = indices.next( );
			respuesta.println("						<li><a href = \"indicePalabrasD.htm?qIndice=" + nombre + "&submit=Buscar\"><p><em>" + nombre + "</em></p></a></li>");
		}
		
		}
		catch ( Exception e )
		{
			e.printStackTrace( );
		}
		respuesta.println("					</ol>");
		respuesta.println("				</div>");
		respuesta.println("            </div>");
		respuesta.println("<!-- end .content --></div>");
		respuesta.println("  <!-- end .container --></div>");
		respuesta.println("</body>");
		respuesta.println("</html>");
	}
	
	private void imprimirError ( PrintWriter respuesta, String e )
	{
		respuesta.println("<!DOCTYPE HTML>");
		respuesta.println("<html>");
		respuesta.println("<head>");
		respuesta.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
		respuesta.println("<title>TweetSpy</title>");
		respuesta.println("<link href=\"style/logeo.css\" rel=\"stylesheet\" type=\"text/css\">");
		respuesta.println("</head>");
		respuesta.println("");
		respuesta.println("<body>");
		respuesta.println("	<div>");
		respuesta.println("		<center>");
		respuesta.println("    		<img src=\"imagenes/mini.png\">");
		respuesta.println("            <img src=\"imagenes/spy.png\" height=\"100px\" width=\"220px\">");
		respuesta.println("    	</center>");
		respuesta.println("	</div>");
		respuesta.println("<div id=\"wrapper\">");
		respuesta.println("	<form class=\"login-form\">");
		respuesta.println("		<div class=\"header\">");
		respuesta.println("		<h1>Error</h1>");
		respuesta.println("		<span>" + e + ".</span>");
		respuesta.println("		</div>");
		respuesta.println("	</form>");
		respuesta.println("</div>");
		respuesta.println("<div class=\"gradient\"></div>");
		respuesta.println("</body>");
		respuesta.println("</body>");
		respuesta.println("</html>");}
	
	private void imprimeEncabezado ( PrintWriter respuesta )
	{
		respuesta.println("<!DOCTYPE HTML>");
		respuesta.println("<html>");
		respuesta.println("<head>");
		respuesta.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
		respuesta.println("<title>TweetSpy</title>");
		respuesta.println("<link href=\"style/TweetSpy.css\" rel=\"stylesheet\" type=\"text/css\">");
		respuesta.println("</head>");
		respuesta.println("<body>");
		respuesta.println("	<center>");
		respuesta.println("		<div class=\"titulo\">");
		respuesta.println("    		<img src=\"imagenes/mini.png\">");
		respuesta.println("            <img src=\"imagenes/spy.png\" height=\"100px\" width=\"220px\">");
		respuesta.println("		</div>");
		respuesta.println("    </center>");
		respuesta.println("<div class=\"container\">");
		respuesta.println("  <div class=\"sidebar1\">");
		respuesta.println("    <ul class=\"nav\">");
		respuesta.println("	  <li><a href=\"homePost.htm\"><img src=\"imagenes/53-house.png\"\\> Home</a></li>");
		respuesta.println("      <li><a href=\"amigos.htm\"><img src=\"imagenes/112-group.png\"\\> Friends</a></li>");
		respuesta.println("      <li><a href=\"followers.htm\"><img src=\"imagenes/63-runner.png\"\\> Followers</a></li>");
		respuesta.println("      <li><a href=\"indicePalabras.htm\"><img src=\"imagenes/33-cabinet.png\"\\> Index</a></li>");
		respuesta.println("      <li><a href=\"#\"><img src=\"imagenes/06-magnify.png\"\\> Search</a></li>");
		respuesta.println("    </ul>");
	}

}
